package view;

import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;
import java.util.*;
import java.util.List;

import javax.swing.*;
import javax.swing.LayoutStyle.*;
import javax.swing.GroupLayout.*;

import controller.*;
import model.*;

public class JuegoBuscar extends JPanel {
	private static final long serialVersionUID = 1L;
	private JTextField v_text;
	private Hashtable<Integer,Juego>juegosTabla=new Hashtable<Integer,Juego>();
	private JComboBox<String> juegoBuscarTipoAlqBox;
	private JComboBox<String> juegoBuscarPlatBox;
	private JComboBox<String> juegoBuscarCatBox;
	private JLabel juegoListaTit;
	private JLabel juegoListaVacia;
	private JTable resultadoBusqueda=new JTable();
	private JScrollPane resultadoBusquedaPane;
	private JScrollPane resultadoBusquedaPaneMenu = new JScrollPane();
	private JMenuBar menu=new JMenuBar();
	private JMenu mnGestinDeCopias;
	private JMenuItem mntmCargarCopia_1;
	private JMenuItem mntmBuscarCopias_1;
	private JMenu mnGestinDeJuegos;
	private JMenuItem mntmEliminar;
	private JMenuItem mntmModificar;

	/**
	 * Create the panel.
	 */
	public JuegoBuscar(final Persona persona) {
		setSize(new Dimension(800, 400));
		
		JLabel juegoBuscarTit = new JLabel("Buscador de Juegos");
		juegoBuscarTit.setAlignmentX(Component.CENTER_ALIGNMENT);
		juegoBuscarTit.setHorizontalAlignment(SwingConstants.CENTER);
		juegoBuscarTit.setHorizontalTextPosition(SwingConstants.CENTER);
		juegoBuscarTit.setFont(new Font("Tahoma", Font.BOLD, 15));
		
		JLabel juegoBuscarNombre = new JLabel("Nombre:");
		juegoBuscarNombre.setHorizontalAlignment(SwingConstants.RIGHT);
		
		v_text = new JTextField();
		v_text.setMinimumSize(new Dimension(6, 50));
		v_text.setMaximumSize(new Dimension(2147483647, 200));
		v_text.setColumns(10);
		
		JLabel juegoBuscarCat = new JLabel("Categor\u00EDa:");
		juegoBuscarCat.setHorizontalAlignment(SwingConstants.RIGHT);
		juegoBuscarCatBox = new JComboBox<String>();
		List<Categoria>cats=CategoriaController.listar();
		juegoBuscarCatBox.addItem("Todas");
		for(Categoria cat : cats){
			juegoBuscarCatBox.addItem(cat.getNombre());
		}

		JLabel juegoBuscarPlat = new JLabel("Plataforma:");
		juegoBuscarPlat.setHorizontalAlignment(SwingConstants.RIGHT);
		juegoBuscarPlatBox = new JComboBox<String>();
		List<Plataforma>plats=PlataformaController.listar();
		juegoBuscarPlatBox.addItem("Todas");
		for(Plataforma plat : plats){
			juegoBuscarPlatBox.addItem(plat.getNombre());
		}

		JLabel juegoBuscarTipoAlq = new JLabel("Tipo de Alquiler:");
		juegoBuscarTipoAlq.setHorizontalAlignment(SwingConstants.RIGHT);
		juegoBuscarTipoAlqBox = new JComboBox<String>();
		List<AlquilerTipo>alqTips=AlquilerTipoController.listar();
		juegoBuscarTipoAlqBox.addItem("Todos");
		for(AlquilerTipo alqTip : alqTips){
			if(alqTip.getNombre().contains("Juego"))juegoBuscarTipoAlqBox.addItem(alqTip.getNombre());
		}

		JButton buscarSocioBtn = new JButton("Buscar");
		buscarSocioBtn.setMinimumSize(new Dimension(120, 23));
		buscarSocioBtn.setMaximumSize(new Dimension(120, 23));
		buscarSocioBtn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try{
					juegosTabla=(Hashtable<Integer,Juego>) JuegoController.getJuegoController().buscar(
							resultadoBusqueda,v_text.getText(),
							(String)juegoBuscarCatBox.getSelectedItem(),
							(String)juegoBuscarPlatBox.getSelectedItem(),
							(String)juegoBuscarTipoAlqBox.getSelectedItem());
					juegoListaTit.setVisible(true);
					if(juegosTabla != null){
						if(juegosTabla.size() > 0){
						resultadoBusqueda.setVisible(true);
						resultadoBusquedaPane.setVisible(true);
						resultadoBusquedaPaneMenu.setVisible(true);
						juegoListaVacia.setVisible(false);
						}else{
							resultadoBusqueda.setVisible(false);
							resultadoBusquedaPane.setVisible(false);
							resultadoBusquedaPaneMenu.setVisible(false);
							juegoListaVacia.setVisible(true);
						}
					}else{
						resultadoBusqueda.setVisible(false);
						resultadoBusquedaPane.setVisible(false);
						resultadoBusquedaPaneMenu.setVisible(false);
						juegoListaVacia.setVisible(true);
					}
				}catch(Exception e){
				}
			}
		});
		
		juegoListaTit = new JLabel("Listado de Juegos");
		juegoListaTit.setMinimumSize(new Dimension(92, 14));
		juegoListaTit.setMaximumSize(new Dimension(92, 14));
		juegoListaTit.setHorizontalTextPosition(SwingConstants.CENTER);
		juegoListaTit.setHorizontalAlignment(SwingConstants.CENTER);
		juegoListaTit.setFont(new Font("Tahoma", Font.BOLD, 15));
		juegoListaTit.setAlignmentX(Component.CENTER_ALIGNMENT);
		juegoListaTit.setVisible(false);
		
		juegoListaVacia = new JLabel("No se ha encontrado ning\u00FAn juego que coincida con esa palabra clave.");
		juegoListaVacia.setHorizontalAlignment(SwingConstants.CENTER);
		juegoListaVacia.setVisible(false);
		resultadoBusquedaPane = new JScrollPane();
		resultadoBusquedaPaneMenu.setViewportView(menu);
		resultadoBusquedaPaneMenu.setVisible(false);
		
		mnGestinDeJuegos = new JMenu("Gesti\u00F3n de Juegos");
		menu.add(mnGestinDeJuegos);
		
		mntmEliminar = new JMenuItem("Eliminar Juego");
		mntmEliminar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(resultadoBusqueda.getSelectedRow()==-1){
					JOptionPane.showMessageDialog(null,
							"Seleccione una fila de la tabla.",
							"Error",
							JOptionPane.ERROR_MESSAGE);
					return;
				}
				Juego juego=juegosTabla.get(resultadoBusqueda.getSelectedRow());
				try{
					JuegoController.getJuegoController().eliminar(juego);
					juegosTabla=(Hashtable<Integer,Juego>) JuegoController.getJuegoController().buscar(
							resultadoBusqueda,v_text.getText(),
							(String)juegoBuscarCatBox.getSelectedItem(),
							(String)juegoBuscarPlatBox.getSelectedItem(),
							(String)juegoBuscarTipoAlqBox.getSelectedItem());
					if(juegosTabla != null){
						if(juegosTabla.size() > 0){
						resultadoBusqueda.setVisible(true);
						resultadoBusquedaPane.setVisible(true);
						resultadoBusquedaPaneMenu.setVisible(true);
						juegoListaVacia.setVisible(false);
						}else{
							resultadoBusqueda.setVisible(false);
							resultadoBusquedaPane.setVisible(false);
							resultadoBusquedaPaneMenu.setVisible(false);
							juegoListaVacia.setVisible(true);
						}
					}else{
						resultadoBusqueda.setVisible(false);
						resultadoBusquedaPane.setVisible(false);
						resultadoBusquedaPaneMenu.setVisible(false);
						juegoListaVacia.setVisible(true);
					}
				}catch(SQLException e){}
			}
		});
		mnGestinDeJuegos.add(mntmEliminar);
		
		mntmModificar = new JMenuItem("Modificar Juego");
		mntmModificar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(resultadoBusqueda.getSelectedRow()==-1){
					JOptionPane.showMessageDialog(null,
							"Seleccione una fila de la tabla.",
							"Error",
							JOptionPane.ERROR_MESSAGE);
					return;
				}
				Juego juego=juegosTabla.get(resultadoBusqueda.getSelectedRow());
				JuegoModificarPopUp popUp=new JuegoModificarPopUp(juego);
				final JComponent[] inputs = new JComponent[] {
						popUp
				};
				JOptionPane.showMessageDialog(null, inputs, "Modificar Juego", JOptionPane.PLAIN_MESSAGE);
				JuegoController.getJuegoController().modificar(juego, popUp);
				juegosTabla=(Hashtable<Integer,Juego>) JuegoController.getJuegoController().buscar(
						resultadoBusqueda,v_text.getText(),
						(String)juegoBuscarCatBox.getSelectedItem(),
						(String)juegoBuscarPlatBox.getSelectedItem(),
						(String)juegoBuscarTipoAlqBox.getSelectedItem());
			}
		});
		mnGestinDeJuegos.add(mntmModificar);
		
		mnGestinDeCopias = new JMenu("Gesti\u00F3n de copias");
		menu.add(mnGestinDeCopias);
		
		mntmCargarCopia_1 = new JMenuItem("Cargar copia");
		mntmCargarCopia_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(resultadoBusqueda.getSelectedRow()==-1){
					JOptionPane.showMessageDialog(null,
							"Seleccione una fila de la tabla.",
							"Error",
							JOptionPane.ERROR_MESSAGE);
					return;
				}
				Juego juego=juegosTabla.get(resultadoBusqueda.getSelectedRow());
				JuegoCopiaAlta popUp=new JuegoCopiaAlta(juego);
				final JComponent[] inputs = new JComponent[] {
						popUp
				};
				JOptionPane.showMessageDialog(null, inputs, "Alta copia", JOptionPane.PLAIN_MESSAGE);
				juegosTabla=(Hashtable<Integer,Juego>) JuegoController.getJuegoController().buscar(
						resultadoBusqueda,v_text.getText(),
						(String)juegoBuscarCatBox.getSelectedItem(),
						(String)juegoBuscarPlatBox.getSelectedItem(),
						(String)juegoBuscarTipoAlqBox.getSelectedItem());
			}
		});
		mnGestinDeCopias.add(mntmCargarCopia_1);
		
		mntmBuscarCopias_1 = new JMenuItem("Buscar copias");
		mntmBuscarCopias_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(resultadoBusqueda.getSelectedRow()==-1){
					JOptionPane.showMessageDialog(null,
							"Seleccione una fila de la tabla.",
							"Error",
							JOptionPane.ERROR_MESSAGE);
					return;
				}
				Juego juego=juegosTabla.get(resultadoBusqueda.getSelectedRow());
				JuegoCopiaBuscar popUp=new JuegoCopiaBuscar(juego,persona);
				final JComponent[] inputs = new JComponent[] {
						popUp
				};
				JOptionPane.showMessageDialog(null, inputs, "Buscar copias", JOptionPane.PLAIN_MESSAGE);
				juegosTabla=(Hashtable<Integer,Juego>) JuegoController.getJuegoController().buscar(
						resultadoBusqueda,v_text.getText(),
						(String)juegoBuscarCatBox.getSelectedItem(),
						(String)juegoBuscarPlatBox.getSelectedItem(),
						(String)juegoBuscarTipoAlqBox.getSelectedItem());
			}
		});
		mnGestinDeCopias.add(mntmBuscarCopias_1);
		resultadoBusquedaPane.setVisible(false);
		
		resultadoBusquedaPane.setViewportView(resultadoBusqueda);
		resultadoBusqueda.setVisible(false);
		
		/*
		 * Chequeo de rol
		 */
		if(persona instanceof PersonaUsuario){
			mnGestinDeJuegos.setVisible(false);
			mntmCargarCopia_1.setVisible(false);
		}
		/*
		 * Fin chequeo
		 */
		GroupLayout groupLayout = new GroupLayout(this);
		groupLayout.setHorizontalGroup(
			groupLayout.createParallelGroup(Alignment.TRAILING)
				.addGroup(groupLayout.createSequentialGroup()
					.addContainerGap()
					.addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
						.addComponent(juegoBuscarCat, GroupLayout.DEFAULT_SIZE, 76, Short.MAX_VALUE)
						.addComponent(juegoBuscarNombre, GroupLayout.PREFERRED_SIZE, 75, GroupLayout.PREFERRED_SIZE))
					.addPreferredGap(ComponentPlacement.RELATED)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addGroup(groupLayout.createSequentialGroup()
							.addComponent(juegoBuscarCatBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
							.addGap(14)
							.addComponent(juegoBuscarPlat, GroupLayout.PREFERRED_SIZE, 72, GroupLayout.PREFERRED_SIZE)
							.addPreferredGap(ComponentPlacement.RELATED)
							.addComponent(juegoBuscarPlatBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
							.addGap(18)
							.addComponent(juegoBuscarTipoAlq)
							.addPreferredGap(ComponentPlacement.RELATED)
							.addComponent(juegoBuscarTipoAlqBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
						.addComponent(v_text, GroupLayout.DEFAULT_SIZE, 639, Short.MAX_VALUE))
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(buscarSocioBtn, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
				.addComponent(juegoListaTit, GroupLayout.DEFAULT_SIZE, 800, Short.MAX_VALUE)
				.addComponent(juegoListaVacia, GroupLayout.DEFAULT_SIZE, 800, Short.MAX_VALUE)
				.addGroup(groupLayout.createSequentialGroup()
					.addContainerGap()
					.addComponent(juegoBuscarTit, GroupLayout.DEFAULT_SIZE, 780, Short.MAX_VALUE)
					.addContainerGap())
				.addGroup(groupLayout.createSequentialGroup()
					.addContainerGap(26, Short.MAX_VALUE)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING, false)
						.addComponent(resultadoBusquedaPane, Alignment.TRAILING)
						.addComponent(resultadoBusquedaPaneMenu, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 774, Short.MAX_VALUE)))
		);
		groupLayout.setVerticalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addContainerGap()
					.addComponent(juegoBuscarTit, GroupLayout.PREFERRED_SIZE, 19, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(v_text, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(buscarSocioBtn, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(juegoBuscarNombre))
					.addGap(9)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(juegoBuscarCat)
						.addComponent(juegoBuscarPlat)
						.addComponent(juegoBuscarPlatBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(juegoBuscarTipoAlq)
						.addComponent(juegoBuscarTipoAlqBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(juegoBuscarCatBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(juegoListaTit, GroupLayout.PREFERRED_SIZE, 19, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(juegoListaVacia)
					.addPreferredGap(ComponentPlacement.RELATED, 14, Short.MAX_VALUE)
					.addComponent(resultadoBusquedaPaneMenu, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(resultadoBusquedaPane, GroupLayout.PREFERRED_SIZE, 213, GroupLayout.PREFERRED_SIZE)
					.addContainerGap())
		);
		
		setLayout(groupLayout);

	}
}
